package com.kuang.dao;

import com.kuang.pojo.Blog;
import com.kuang.pojo.VoBlog;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface BlogMapper {
    //  查询所有 博客 用于后台展示 按照创建时间降序
    public List<Blog> selectAllBlog();

    //    查询所有 博客 用于前台首页展示 按照创建时间降序  并且是发布状态的！
    public List<Blog> selectAllSiteIndexBlog();

    public int insertBlog(Blog blog);

    //     查询新增博客的id
    public Blog selectBlogId();

    //    删除博客
    public int deleteblog(Integer blogid);

    //     通过id查询博客！
    public Blog selectBlogById(Integer blogid);

    //     所有博客的数量
    public int countBlog();

    //    状态是发布 的所有博客数量
    public int countBlogPublished();

// 查询 博客 按照时间和推荐 排序 选出前三个3个

    public List<Blog> selectBlogRecommend();

//    public List<Blog> selectBlog
    // 修改博客的信息通过博客的id

    public int updateBlogById(Blog blog);


    //    用于前台分类的分类展示 查出每一篇博客对应分类的个数
    public List<VoBlog> selectAllBlogCountGroupTypeId();

    //     通过博客的分类id查出博客 , 用于在前台 的分类页面点击某一分类的展示
    public List<Blog> selectAllBlogByTypeId(@Param("typeid") Integer typeid);

//    后台模块的分类删除，因为分类删除了对应的博客记录，
//    public int deleteByTypeId(Integer typeid);

    //    对后台模块的分类删除，删除分类表的某一条记录的时候，那么要将博客表中对应有分类id的记录的分类id字段设置为0表示没有！
    public int updateBlogTypeIdByTypeId(Integer typeid);

    //     通过中间表提供的博客id查出 对应的博客对象
    public Blog selectAllBlogByMiddleBlogId(Integer blogid);

    // 查出博客的年月分按照年月分组
    public List<String> selectGroupYearMonth();

    //     按照博客的分组的年月进行查找
    public List<Blog> selectBlogByYear(String year);

    //     不分组时候的全部博客数量
//    public int countBlog();
//    查询发布状态 并且按照创建时间降序的博客
    public List<Blog> selectPageSiteIndexBlog(@Param("pageindex") Integer pageindex, @Param("pagesize") Integer pagesize);

    //    查询发布状态 并且按照创建时间降序的博客 并且 按照关键字模糊查询
    public List<Blog> selectPageSiteIndexBlogSearch(@Param("pageindex") Integer pageindex, @Param("pagesize") Integer pagesize, @Param("keywords") String keywords, @Param("typeid") Integer typeid);

    //    查询上面方法 查询记录的总行数
    public int selectPageSiteIndexBlogSearchCount(@Param("pageindex") Integer pageindex, @Param("pagesize") Integer pagesize, @Param("keywords") String keywords, @Param("typeid") Integer typeid);

    public int updateBlogViews(Integer blogid);

    public int updateBlogAll(Blog blog);

    // 用于 后台评论的查询  为了查出博客的标题
    public List<Blog> selectBlogByBlogId(Integer blogid);

}
